【Spring】对象的生命周期(创建、初始化、销毁)

您所在的位置:网站首页 spring ioc创建和销毁 【Spring】对象的生命周期(创建、初始化、销毁)

【Spring】对象的生命周期(创建、初始化、销毁)

2024-01-03 08:29| 来源: 网络整理| 查看: 265

文章目录 一、生命周期二、创建阶段三、初始化阶段3.1 InitializingBean接口3.2 配置init-method3.3 分析 四、销毁阶段4.1 DisposableBean 接口:4.2 配置 destroy-method 五、总结

一、生命周期

什么是对象的生命周期?

⼀个对象创建、存活、消亡的⼀个完整过程。

为什么要学习对象的生命周期?

由 Spring 负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好 Spring 为我们创建的对象。

生命周期的 3 个阶段:

创建阶段 —> 初始化阶段 —> 销毁阶段 二、创建阶段

Spring 工厂何时创建对象?

当scope="singleton":表示只创建一个对象(单例),Spring 工厂(IoC 容器)创建的同时,创建对象。 当scope="prototype":Spring 工厂在获取对象 ctx.getBean("xxx") 的同时,创建对象。

通过配置 也可以实现工厂获取对象的同时,创建对象。

三、初始化阶段

Spring 工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化操作。

初始化方法提供:程序员根据需求,提供初始化方法,最终完成初始化操作。 初始化方法调用:Spring 工厂进行调用。

提供初始化方法的两种方式:

3.1 InitializingBean接口

实现InitializingBean接口,重写afterPropertiesSet()方法:

public class Product implements InitializingBean { //程序员根据需求实现的方法, 完成初始化操作 @Override public void afterPropertiesSet() throws Exception { System.out.println("Product.afterPropertiesSet"); } } 3.2 配置init-method

对象中提供一个普通的初始化方法,配置文件种配置 init-method:

public class Product { public void myInit() { System.out.println("Product.myInit"); } } 3.3 分析

如果⼀个对象实现 InitializingBean接口又提供的普通的初始化方法,执行顺序?

先执行 InitializingBean,再执行普通初始化方法。

注入⼀定发生在初始化操作的前面。

初始化操作到底是什么?

资源的初始化:数据库、IO、网络、… 四、销毁阶段

Spring 销毁对象前,会调用对象的销毁方法,完成销毁操作。 Spring 什么时候销毁所创建的对象?ctx.close();

销毁方法提供:程序员根据业务需求,定义销毁方法,完成销毁操作 销毁方法调用:Spring 工厂进行调用。

销毁方法的操作只适用于 scope="singleton",初始化操作都适用。

销毁操作到底是什么? 资源的释放:io.close()、connection.close()、…

开发流程与初始化操作一样,提供销毁方法的两种方式:

4.1 DisposableBean 接口:

实现DisposableBean接口,重写destroy()方法:

public class Product implements DisposableBean { // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作 @Override public void destroy() throws Exception { System.out.println("Product.destroy"); } } 4.2 配置 destroy-method

对象中提供一个普通的销毁方法,配置文件种配置destroy-method:

public class Product { // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作 public void myDestory() { System.out.println("Product.myDestory"); } } 五、总结 public class Product implements InitializingBean, DisposableBean { private String name; public String getName() { return name; } public void setName(String name) { System.out.println("Product.setName"); this.name = name; } Product() { // 创建 System.out.println("Product.Product"); } // 程序员根据需求实现的方法, 完成初始化操作 public void myInit() { System.out.println("Product.myInit"); } // 程序员根据需求实现的方法, 完成初始化操作 @Override public void afterPropertiesSet() throws Exception { System.out.println("Product.afterPropertiesSet"); } public void myDestory() { System.out.println("Product.myDestory"); } // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作 @Override public void destroy() throws Exception { System.out.println("Product.destroy"); } }

在这里插入图片描述 在Spring工厂创建完毕后

Spring通过构造方法创建对象,注意,如果是单例对象(scope=singleton),那么该对象在工程创建的同时也完成了创建;如果非单例对象(scope=prototype),会通过ctx.getBean("xx")方法创建对象。初始化阶段:会执行实现了InitializingBean接口并重写的afterPropertiesSet方法。初始化阶段:根据配置文件中init-method的设置,执行自定义的初始化方法。销毁阶段:会执行实现了DIsposableBean接口并重写的destory方法。销毁阶段:根据配置文件中destroy-method的设置,执行自定义的销毁方法。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3